lexer grammar AnalexLexer;

options {
  language = Java;
}

@lexer::header {
  package Practica8.Sintactico;
}

@lexer::members {
  private ArrayList<String> errors = new ArrayList<String>();
  public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
    String hdr = getErrorHeader(e);
    String msg = getErrorMessage(e, tokenNames);
    errors.add(hdr + " " + msg);
  }
   
  public ArrayList<String> getErrors() {
    return errors;
  }
}

fragment SALTO_LINEA:  ('\r' '\n' | '\r' | '\n');
fragment DIGITO: '0'..'9';
fragment LETRA: 'A'..'Z' | 'a'..'z' | '_';

BLANCO: (' ' | '\t' | SALTO_LINEA) {skip();};
NUMERO: (DIGITO)+('.'(DIGITO)+)?;
ID: LETRA (LETRA|DIGITO)*;

OP_ASSIGN: ':=';
OP_SUM: '+';
OP_SUB: '-';
OP_DIV: '/';
OP_MULT: '*';
LEFT_PAREN: '(';
RIGHT_PAREN: ')';
SEPARADOR: ';';